﻿namespace SocialApi.Core.Patterns
{
    /// <summary>
    /// Потокобезопасный с использованием generic-класса и с отложенной инициализацией
    /// </summary>
    /// <typeparam name="T">Singleton класс</typeparam>
    public class Singleton<T> 
        where T : class
    {
        /// <summary>
        /// Инициализирует новый экземпляр класса <see cref="Singleton{T}"/>
        /// </summary>
        protected Singleton() { }

        /// <summary>
        /// Возвразает экземпляр класса <see cref="Singleton{T}"/>
        /// </summary>
        public static T Instance { get { return SingletonCreator<T>.CreatorInstance; } }
    }
}